如何使用docker和python工具包datmo为数据科学和AI框架快速配置环境

您所在的位置:网站首页 python 调用docker 如何使用docker和python工具包datmo为数据科学和AI框架快速配置环境

如何使用docker和python工具包datmo为数据科学和AI框架快速配置环境

#如何使用docker和python工具包datmo为数据科学和AI框架快速配置环境| 来源: 网络整理| 查看: 265

无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库、软件包或者框架总是一个困难又繁琐的过程。但是像Docker这样的集装箱化工具正在彻底改变着软件的可重复性,只不过它们还没有在数据科学和人工智能社区中流行起来。但随着机器学习框架和算法的不断发展,我们将很难花时间专注于学习所有相关的开发人员工具,尤其是那些与模型构建过程没有直接关联的工具。

在这篇文章中,我将展示如何使用docker和python工具包datmo为任何流行的数据科学和AI框架快速配置环境。

一.Docker

1.docker是什么

该软件于2013年由dotCloud 公司推出,发布以来一直备受关注和讨论,被认为可能会改变软件行业。

2.为什么使用docker

如果让你说出软件开发最烦人的事情,那么环境配置必然是其中之一。例如开始编写Python应用程序,那么你的第一个步骤就是在您的计算机上安装Python。软件运行时,你不仅需要让自己计算机上的环境需适合你的应用程序按预期运行,并且还需要与生产环境相匹配。这就是所谓的环境一致性问题。这里面大量的重复劳动不说,还经常出现系统不兼容等莫名其妙的问题,非常令人崩溃。很可能再自己机器上跑通了,但放到用户的环境里,或者服务器上就出问题了。

那么可不可以在软件安装的时候把软件需要的环境一并复制过去呢?虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,但它的缺点很多:资源占用多、冗余步骤多、启动慢等等。

Docker是一种全新的虚拟化方式。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。在这样的前提下,它跟传统的虚拟化方式相比具有众多优势:

高效的利用系统资源。

启动速度快。容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。

确保了应用运行环境一致性。

可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。

容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比拟机文件要小很多。

3.如何使用docker

首先要理解Docker的三个概念:镜像、容器、仓库。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。镜像是只读的,可以用来创建Docker容器,容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

Docker Registry是集中存放镜像文件的场所,提供集中的存储、分发镜像的服务。一个 Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。

这里以TensorFlow机器学习框架搭建为例讲解如何利用docker快速搭建环境。

首先你需要安装并启动Docker。如果要使用GPU则安装nvidia-docker。

1)直接使用别人做好的镜像

在命令行输入以下两条命令:

docker image pull tensorflow/tensorflow docker run -it -p8888:8888-v /$(pwd)/notebooks:/notebooks tensorflow/tensorflow

第一行命令在Docker Hub上拉取tensorflow官方镜像的cpu版本。

第二行则由此镜像创建一个容器,并在容器里运行jupyter服务。在你的浏览器上打开http://localhost:8888/,就可以在jupyter里导入TensorFlow包了。

-v 参数的作用是将宿主机当前目录下的notebook目录挂载到容器内的/notebooks目录,不添加这个参数的话,当结束 container 的时候,jupyter notebook 里的内容也会随之消失。

我们还可以进入到容器里查看容器的环境配置信息:

docker run -it -p 8888:8888 tensorflow/tensorflow bash

解释一下参数含义:

-i:以交互模式运行容器,通常与 -t 同时使用

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

bash:在容器内执行bash命令

root@21cebb7bd6b4:/notebooks# python Python2.7.12(default, Dec 42017,14:50:18) [GCC5.4.020160609] on linux2 Type"help","copyright","credits"or"license"formore information. >>> import tensorflow >>> root@21cebb7bd6b4:/notebooks# python3 Python3.5.2(default, Nov232017,16:37:01) [GCC5.4.020160609] on linux Type"help","copyright","credits"or"license"formore information. >>> import tensorflow Traceback (most recent call last): File"", line1,in ImportError:Nomodulenamed'tensorflow'

2)保存修改后的容器为新的镜像

通过在容器里执行bash命令后我们可以看到,TensorFlow官方提供的这个容器的环境已经安装了Python2和Python3,不过只有在python2上安装了TensorFlow的环境,如果你想在python3运行TensorFlow的话,可以自己手动在容器里进行你喜欢的环境配置。

有没有办法把修改好的容器作为基础镜像,以后需要创建容器的时候都使用这个新的镜像呢?通过命令docker commit [CONTAINER]可以提交容器副本,制作属于你自己的镜像。命令格式如下:

dockercommit-m="description"-a="ahthorName"97744639b45d ahthorName/tensorflow-python3:latest

参数说明:

-m:提交的描述信息

-a:声明镜像作者

97744639b45d:容器ID

ahthorName/tensorflow-python3指定要创建的目标镜像名

docker ps -a这条命令可以列出所有已经创建的未删除的容器。

这里分享一个docker hub 上的镜像docker pull dash00/tensorflow-python3-jupyter,里面已经配置好了python3下TensorFlow的环境,大家可以直接拉取使用。

3)dockerfile定义全新镜像

上面的方法是在基础镜像的容器上做修改创建我们自己的镜像,我们也可以编写一个Dockerfile来构建全新的镜像。我们已经知道Docker镜像是制作Docker容器的模版,而Dockerfile则是一个定义Docker镜像的文件。下面我们尝试编写一个Dockerfile。

Dockerfile定义了容器内的环境配置。在此环境中,对网络接口和磁盘驱动器等资源的访问都是虚拟化的,该环境与系统的其他部分隔离。因此您需要将端口映射到外部的宿主机环境,并具体指定哪些文件是跟外部环境保持一致的。只要在定义好此操作之后,你就可以预期,无论什么时候你运行这个文件,由Dockerfile中定义的应用程序环境的构建都会执行完全相同的操作。

如何创建

这里是一个示例:创建一个空目录,创建一个名为的文件dockerfile,再创建两个文件requirements.txt和app.py和dockerfile放在一起。

以下是dockerfile文件内容,注释里有条语句的解释:

#使用python:2.7-slim作为基础镜像 FROM python:2.7-slim #指定工作目录(或者称为当前目录) WORKDIR /app #将当前文件夹下的内容(requirements.txt和app.py)复制到容器里的/app目录下 ADD . /app #安装在requirements.txt文件里指定的python包 RUN pip install --trusted-host pypi.python.org -r requirements.txt #向外部环境暴露80端口 EXPOSE 80 #设置环境变量 ENV NAME World #一旦容器开始运行,则运行app.py作为容器的主进程 CMD ["python", "app.py"]

FROM指定基础镜像,是必备的指令,并且必须是第一条指令。在 Docker Store 上有非常多的高质量的官方镜像提供给我们使用。

RUN 指令是用来执行命令行命令的。

CMD 指令用于指定默认的容器主进程的启动命令。有别于传统虚拟机概念,对于容器而言,其启动程序就是容器的主要进程,容器就是为了主进程而存在的。

有了Dockerfile 文件,我们就可以使用docker image build命令创建 image 文件了。运行:

#-t参数用来指定 image 文件的名字 Docker build -t friendlyhello

如果运行成功,使用docker image ls命令就可以看到新生成的 image 文件friendlyhello了,它位于你机器的本地Docker镜像注册表中。

docker imagels REPOSITORY TAG IMAGE ID friendlyhello latest 326387cea398

二.Datmo

如果你觉得上面描述的关于docker的操作依然十分麻烦的话,我还有一个工具推荐给你,那就是datmo。Datmo充分利用了Docker,简化了流程,帮助您快速轻松地运行AI框架。下面是使用流程:

1.前提条件

安装并启动Docker(https://docs.docker.com/install/#supported-platforms)

(如果使用GPU)安装CUDA 9.0(https://developer.nvidia.com/cuda-90-download-archive)

(如果使用GPU)安装nvidia-docker(https://github.com/datmo/datmo/wiki/Datmo-GPU-support-and-setup)

2.安装datmo

就像任何python包一样,使用以下命令从终端安装datmo:

$ pip install datmo

3.初始化datmo项目

在终端中,打开项目文件夹。然后,输入以下命令:

$ datmo init

然后,你将被要求提供项目的名称和描述。

4.启动环境设置

在输入名称和描述后,datmo将询问是否要设置环境 - 输入y并按enter。

5.选择系统驱动程序(CPU或GPU)

然后,CLI将询问希望为您的环境选择哪些系统驱动程序。如果不打算使用GPU,请选择cpu。

6.选择一个环境

接下来,你将从众多预打包环境中选择一种。只需在提示中回复您要使用的环境的编号或ID。

7.选择编程语言版本

上述许多环境都有不同的版本,具体取决于你计划使用的语言和版本。

例如,在选择keras-tensorflow环境后,我将面临以下提示,询问我是否要使用Python 2.7或Python 3.5。

8.启动工作区

现在是时候启动你的工作区了。选择你要使用的工作区,然后在终端中输入相应的命令。

Jupyter Notebook - $ datmo notebook JupyterLab - $ datmo jupyterlab RStudio -  $ datmo rstudio(在R-base环境中可用) 终端模式 - $ datmo terminal

责任编辑:lq

原文标题:5分钟配置好你的AI开发环境

文章出处:【微信号:vision263com,微信公众号:机器视觉智能检测】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

扫一扫,分享给好友

复制链接分享 评论

发布评论请先 登录

相关推荐

空中客车和THC签署合作协议 高通获得生态系统合作伙伴广泛支持 空中客车公司和直升机公司(THC)签署了一项协议,以继续扩大直升机活动并在沙特阿拉伯王国引入城市空中.... 发表于 03-18 16:40 • 1097次 阅读 python正则表达式中的常用函数 编译正则表达式模式,返回一个正则对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可.... 的头像 python爬虫知识分享 发表于 03-18 16:12 • 291次 阅读 python正则表达式中的常用函数 1、compile():编译正则表达式模式,返回一个正则对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高... 发表于 03-18 16:12 • 2704次 阅读 python正则表达式数量词 这部分理解一下数量词,为什么要用数量词,想想都知道,如果你要匹配几十上百的字符时,难道你要一个一个的写,所以就出现了数量... 发表于 03-18 16:05 • 2789次 阅读 详解python正则表达式数量词 这部分理解一下数量词,为什么要用数量词,想想都知道,如果你要匹配几十上百的字符时,难道你要一个一个的.... 的头像 python爬虫知识分享 发表于 03-18 16:05 • 287次 阅读 为什么不建议把数据库部署在Docker容器内? 不要将数据储存在容器中,这也是 Docker 官方容器使用技巧中的一条。容器随时可以停止、或者删除。.... 的头像 Android编程精选 发表于 03-18 09:56 • 65次 阅读 python正则表达式字符集 字符集是由一对方括号 “[]” 括起来的字符集合。使用字符集,可以匹配多个字符中的一个。 举个例子,比如你使用 C[ET]O 匹... 发表于 03-17 16:48 • 2878次 阅读 python正则表达式字符集 字符集是由一对方括号 “[]” 括起来的字符集合。使用字符集,可以匹配多个字符中的一个。 举个例子,.... 的头像 python爬虫知识分享 发表于 03-17 16:48 • 306次 阅读 初识 Python 正则表达式 正则表达式是一个特殊的字符序列,用于判断一个字符串是否与我们所设定的字符序列是否匹配,也就是说检查一个字符串是否与某种模... 发表于 03-17 16:44 • 2339次 阅读 初识 Python 正则表达式 正则表达式是一个特殊的字符序列,用于判断一个字符串是否与我们所设定的字符序列是否匹配,也就是说检查一.... 的头像 python爬虫知识分享 发表于 03-17 16:44 • 291次 阅读 Elasticsearch 8作为开源软件正式发布 Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的.... 的头像 Linux爱好者 发表于 03-17 14:12 • 159次 阅读 OpenHarmony 3.1 Beta版本关键特性解析——ArkUI开发框架容器类API的介绍与使用 线性容器类底层主要通过数组实现,包括 ArrayList、Vector、List、LinkedLis.... 的头像 OpenAtom OpenHarmony 发表于 03-17 10:48 • 111次 阅读 从 yield 开始入门python协程 简单介绍 yield本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return 就像一对新兄弟,有相似之处,又各有不同。 相似的... 发表于 03-16 16:21 • 146次 阅读 从yield开始入门python协程 本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return 就像一对新兄弟,有相似之处.... 的头像 python爬虫知识分享 发表于 03-16 16:20 • 214次 阅读 线程池创建的两种方法 1. 使用内置模块在使用多线程处理任务时也不是线程越多越好,由于在切换线程的时候,需要切换上下文环境,依然会造成cpu的大量开... 发表于 03-16 16:15 • 139次 阅读 python创建线程池的两种方法 在使用多线程处理任务时也不是线程越多越好,由于在切换线程的时候,需要切换上下文环境,依然会造成cpu.... 的头像 python爬虫知识分享 发表于 03-16 16:15 • 198次 阅读 使用Python实现五个自动化场景 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大.... 的头像 Linux爱好者 发表于 03-16 11:13 • 145次 阅读 使用AioHttp异步抓取火星图片 让我们从一个简单的应用程序开始,只是为了启动和运行aiohttp。首先,创建一个新的virtuale.... 的头像 马哥Linux运维 发表于 03-16 09:58 • 142次 阅读 如何用python爬取抖音app数据 记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。 的头像 马哥Linux运维 发表于 03-16 09:07 • 169次 阅读 python创建多线程的两种方法 1. 用函数创建多线程在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。 threading.... 发表于 03-15 16:47 • 965次 阅读 python创建多线程的两种方法 1. 用函数创建多线程 在Python3中,Python提供了一个内置模块 threading.Th.... 的头像 python爬虫知识分享 发表于 03-15 16:47 • 321次 阅读 python多线程和多进程对比 1. 基本概念在开始讲解理论知识之前,先过一下几个基本概念。虽然咱是进阶教程,但我也希望写得更小白,更通俗易懂。 串行:一个... 发表于 03-15 16:42 • 456次 阅读 python多线程和多进程的对比 1. 基本概念 在开始讲解理论知识之前,先过一下几个基本概念。虽然咱是进阶教程,但我也希望写得更小白.... 的头像 python爬虫知识分享 发表于 03-15 16:42 • 310次 阅读 python多线程和多进程的对比 手把手教你使用Python提取快递信息 现在快递遍布生活的角角落落,一个快递其实是信息的集合体,里面包含大量的物流信息。在面对一大堆快递信息需要我们进行按省份... 发表于 03-15 16:37 • 1014次 阅读 基于Python语言的RFM模型讲解 上面步骤可以知道,我们需要有RFM三个维度,根据我们在业务分析方法课程中学到的,业务分析模型离不开指.... 的头像 数据分析与开发 发表于 03-15 15:38 • 179次 阅读 理解python模块的缓存 在一个模块内部重复引用另一个相同模块,实际并不会导入两次,原因是在使用关键字 import 导入模块时,它会先检索 sys.modules 里... 发表于 03-14 16:42 • 1082次 阅读 一文理解python模块的缓存 在一个模块内部重复引用另一个相同模块,实际并不会导入两次,原因是在使用关键字 import 导入模块.... 的头像 python爬虫知识分享 发表于 03-14 16:42 • 190次 阅读 关于python包导入的三个冷门知识点 使用 from module import * 默认情况下会导入 module 里的所有变量,若你只.... 的头像 python爬虫知识分享 发表于 03-14 16:33 • 220次 阅读 方舟开发框架中容器类的各种类型   容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法。在方舟.... 的头像 HarmonyOS官方合作社区 发表于 03-14 13:45 • 136次 阅读 方舟开发框架中容器类的各种类型 高光谱成像技术应用于植物根系表型研究 根系是植物的重要组成部分,植物吸收土壤中的水分与养分全依赖根系,所以根系的研究对于植物各学科来说都至.... 发表于 03-14 10:53 • 6次 阅读 一文了解pip的超全使用指南 由于默认情况下,wheel 包的平台是运行 pip download 命令 的平台,所以可能出现平台.... 的头像 python爬虫知识分享 发表于 03-11 16:03 • 258次 阅读 详解python常规包与命名空间包 python常规包与命名空间包 1. 常规包 在 Python 3.3 之前或者说 Python 2.... 的头像 python爬虫知识分享 发表于 03-11 15:46 • 260次 阅读 python花式导包的八种方法 python花式导包的八种方法 1. 直接 import 人尽皆知的方法,直接导入即可 import.... 的头像 python爬虫知识分享 发表于 03-10 16:48 • 225次 阅读 python安装第三方包的八种方法 python安装第三方包的八种方法 1. 使用 easy_install easy_install .... 的头像 python爬虫知识分享 发表于 03-10 16:27 • 223次 阅读 python包、模块和库是什么 1. 模块 以 .py 为后缀的文件,我们称之为 模块,英文名 Module。 模块让你能够有逻辑地.... 的头像 python爬虫知识分享 发表于 03-09 16:47 • 244次 阅读 python类的多态和类的property属性 python类的多态 多态,是指在同一类型下的不同形态。 比如下面这段代码 class People.... 的头像 python爬虫知识分享 发表于 03-09 16:37 • 218次 阅读 用Python学习科学编程 用Python学习科学编程,Python经典教材。 发表于 03-09 15:00 • 41次 阅读 python类的继承详解 python类的继承 类的继承,跟人类繁衍的关系相似。 被继承的类称为基类(也叫做父类),继承而得的.... 的头像 python爬虫知识分享 发表于 03-08 16:40 • 388次 阅读 python私有变量和私有方法 python私有变量和私有方法 1. 下划线妙用 在 Python 中,下划线可是非常推荐使用的符号.... 的头像 python爬虫知识分享 发表于 03-08 16:30 • 456次 阅读 python静态方法与类方法 python静态方法与类方法 1. 写法上的差异 类的方法可以分为: 静态方法:有 staticme.... 的头像 python爬虫知识分享 发表于 03-07 16:56 • 443次 阅读 python类的理解与使用 python类的理解与使用 1. 通俗理解类 类(英文名 class),是具有相同特性(属性)和行为.... 的头像 python爬虫知识分享 发表于 03-07 16:51 • 419次 阅读 python如何捕获异常和主动抛出异常 python如何主动抛出异常和捕获异常 1. 如何抛出异常? 异常的产生有两种来源: 一种是程序自动.... 的头像 python爬虫知识分享 发表于 03-04 17:09 • 682次 阅读 Python中有哪些常见的错误和异常 python常见异常类型 在程序运行过程中,总会遇到各种各样的问题和错误。 有些错误是我们编写代码时.... 的头像 python爬虫知识分享 发表于 03-04 16:58 • 706次 阅读 python变量的作用域 python变量的作用域 1. 作用域 Python的作用域可以分为四种: L (Local) 局部.... 的头像 python爬虫知识分享 发表于 03-03 16:50 • 427次 阅读 python偏函数和泛型函数详解 python偏函数 假如一个函数定义了多个位置参数,那你每次调用时,都需要把这些个参数一个一个地传递.... 的头像 python爬虫知识分享 发表于 03-03 16:43 • 452次 阅读 python高阶函数详解 python高阶函数 1. map 函数 map 函数,它接收两个参数,第一个参数是一个函数对象(当.... 的头像 python爬虫知识分享 发表于 03-02 16:47 • 202次 阅读 python高阶函数详解 python匿名函数的使用 python匿名函数的使用 匿名函数(英语:anonymous function)是指一类无需定义标.... 的头像 python爬虫知识分享 发表于 03-02 16:42 • 198次 阅读 11个案例讲解python函数参数 函数,在定义的时候,可以有参数的,也可以没有参数。 的头像 python爬虫知识分享 发表于 03-01 16:39 • 276次 阅读 详解python普通函数创建与调用 函数是一种仅在调用时运行的代码块。您可以将数据(称为参数)传递到函数中,然后由函数可以把数据作为结果.... 的头像 python爬虫知识分享 发表于 03-01 16:32 • 311次 阅读 python推导式是什么 python推导式 推导式(英文名:comprehensions),也叫解析式,是Python的一种.... 的头像 python爬虫知识分享 发表于 02-28 17:13 • 222次 阅读 python while循环详解 python while循环 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处.... 的头像 python爬虫知识分享 发表于 02-28 16:39 • 195次 阅读 《深入Python3》中文版pdf 《深入Python3》中文版pdf 发表于 02-28 09:45 • 45次 阅读 python for循环的案例说明 python for循环 for 循环可以遍历任何序列的项目,如一个列表或者一个字符串。 它的基本语.... 的头像 python爬虫知识分享 发表于 02-25 16:27 • 244次 阅读 python判断语句的详细说明 python判断语句:if 1. 简单小例子 如果满足条件 A,则执行代码块 a,否则执行代码块 b.... 的头像 python爬虫知识分享 发表于 02-25 16:22 • 249次 阅读 python生成器是什么 python生成器 1. 什么是生成器? 生成器(英文名 Generator ),是一个可以像迭代器.... 的头像 python爬虫知识分享 发表于 02-24 15:53 • 266次 阅读 python迭代器详解 python迭代器 1. 可迭代对象 可以利用 for 循环的对象,都叫可迭代对象。 列表、元组、字.... 的头像 python爬虫知识分享 发表于 02-24 15:42 • 227次 阅读 初学者学Python必看的几个练手小项目 Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python.... 的头像 叶枫架构师 发表于 02-23 17:06 • 317次 阅读 4个Python经典项目实战,练手必备! Python是一种极具可读性和通用性的编程语言。Python这个名字的灵感来自于英国喜剧团体Mont.... 的头像 叶枫架构师 发表于 02-23 17:06 • 311次 阅读 python集合是什么 python集合 集合(英文名 set),它是一个无序的不重复元素序列。 这里面有两个重点: 无序,.... 的头像 python爬虫知识分享 发表于 02-23 17:01 • 291次 阅读 python字典是什么 python字典 字典(英文名 dict),它是由一系列的键值(key-value)对组合而成的数据.... 的头像 python爬虫知识分享 发表于 02-23 16:54 • 257次 阅读


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3